--- title: RAG向量检索系统开发文档 type: system-architecture created: 2026-05-26 updated: 2026-05-26 tags: [RAG, 向量检索, 知识库, 信息检索, AI OS基础设施] ---
RAG 向量检索系统开发文档
> 现状诊断:知识库 4862 个 .md 文件(~64MB),关键词搜索已无法高效定位。需要引入语义检索——让 AI 理解"你想找什么",而不是仅仅匹配"你搜了什么字"。
---
一、你的实际问题是什么
1.1 知识库数据画像(基于实际扫描)
| 指标 | 数值 | 含义 | |------|------|------| | Obsidian .md 文件 | 4862 个 | 中等规模个人知识库 | | 总大小 | ~64 MB | 纯文本,非常轻量,单机可处理 | | 平均文件大小 | 11.6 KB | 一篇文章约等于一个 chunk | | 中位数文件大小 | 7.8 KB | 绝大多数文件本身就很小 | | 五行人格心理学 | 345 个文件,~6.6 MB | 子知识库,密度最高 | | 五大元素测评题 | ~300 题 | 结构化数据,需要保持完整 | | SKILL.md | 194 个,平均 9.9 KB | 有 frontmatter + 正文的结构化文档 | | 平均链接密度 | 7 个 wikilinks/文件 | 高度互联的知识网络 | | 平均标签密度 | 10.3 个 tags/文件 | 丰富的元数据标签 | | 大小分布:<1KB | 294 个(6%) | 极短笔记,可合并 | | 大小分布:1-5KB | 1237 个(25%) | 短笔记 | | 大小分布:5-20KB | 2646 个(54%) | 主体——适合整文件作为 chunk | | 大小分布:20-100KB | 679 个(14%) | 长文——需要按标题切片 | | 大小分布:>100KB | 6 个(<1%) | 超长文档——需要专门处理 |
1.2 当前搜索的痛点
| 你想搜 | 关键词搜索的结果 | 你真正想要的结果 | |--------|-----------------|----------------| | "木生火" | 只返回含"木"和"火"字 | 扩展为"生长滋养光明"的语义关联 | | "亲密关系冲突" | 可能找不到 | 自动匹配场景 SC-01 + 五行建议 | | "我经常发火" | 无匹配 | 识别为阴木/阴火->自动找到拔阴取阳方法 | | "领导力沟通" | 只找到含"领导力"的文件 | 匹配土行人领导风格 + 相关场景 | | 跨场景关联 | 需要手动逐篇查找 | 一次搜索返回多个场景的相关内容 |
1.3 根本原因
关键词搜索天然不适合"意思匹配"的需求。你的知识库特点是:
---
二、RAG 是什么(用你能懂的方式)
> RAG = 检索增强生成——在回答你的问题之前,AI 先去知识库里搜一遍相关的内容,然后基于搜到的"证据"来回答。
2.1 核心流程
``` 你的问题:"什么是木火共生?" | v Step 1: Embedding(向量化) 把问题变成一串数字:[0.123, -0.456, 0.789, ...] (共1024个数字) | v Step 2: 向量搜索 在你的4862个文件中,找"语义上最像这个问题的"前20篇 |- #1 木火共生协议.md(相似度 0.92) |- #2 木火共生关系Skill.md(相似度 0.88) |- #3 木行人·生长与创造.md(相似度 0.76) | v Step 3: 混合增强 + Rerank(精排)+ 注入回答 ```
2.2 "向量"是什么
> 每个文件被翻译成一串数字(向量),类似物品在仓库里的坐标。 > "木火共生"和"木生火"的坐标很接近,"会计流程"的坐标很远。 > 搜索 = 找"坐标最接近"的文件——这就是"语义相似度"。
---
三、技术架构
3.1 组件选型
| 组件 | 选型 | 理由 | 不选 | |------|------|------|------| | 向量数据库 | Qdrant | 混合搜索(向量+BM25+过滤),一个.exe搞定,~200MB内存 | Milvus太重,Chroma不支持混合搜索 | | Embedding | BGE-M3 | 1024维,中英双语,支持稠密+稀疏双向量 | text2vec英文弱,OpenAI需API调用 | | Reranker | BGE-reranker-v2-m3 | Top-k二次精排,准确率+15% | | | 分块 | 按文件大小自适应 | 80%文件<20KB不切分 | 固定512token会切断上下文 |
3.2 数据管道
| 文件类型 | 分块策略 | |----------|---------| | < 20KB 的 md(占80%) | 不切分,整文件 = 1 个 chunk | | > 20KB 的 md(占14%) | 按 `##` 标题切分 | | SKILL.md | frontmatter 一个 chunk + 正文按标题切 | | 测评题 | 按元素聚合(木/火/土/金/水 各一个 chunk) | | < 1KB 的笔记(占6%) | 按目录合并 |
3.3 Chunk 元数据
```json { "chunk_id": "wx-assessment-wood-001", "source_file": "05-五行人格心理学/测评系统/03-木行人-测评模块.md", "tags": ["测评", "木行", "阳木", "生长性"], "scene_ids": ["SC-01", "SC-03", "SC-08"], "wuxing": "木", "yin_yang": "阳", "dimension": "基本属性", "links_to": ["07-计分规则.md", "火行人测评模块.md"] } ```
3.4 检索策略
``` Layer 1: 意图识别 -> 判断场景ID + 五行类型 Layer 2: 混合检索(向量 0.6 + BM25 0.3 + 元数据过滤 0.1)-> Top 50 Layer 3: Reranker 精排 -> Top 10 ```
3.5 场景路由权重
| 场景 | 向量权重 | BM25权重 | 过滤条件 | |------|---------|---------|---------| | SC-01 亲密关系 | 0.7 | 0.3 | scene_ids=SC-01 | | SC-02 亲子教育 | 0.6 | 0.4 | scene_ids=SC-02 | | SC-03 领导力 | 0.5 | 0.5 | scene_ids=SC-03 | | SC-04 团队建设 | 0.6 | 0.4 | scene_ids=SC-04 | | SC-05 高效沟通 | 0.7 | 0.3 | scene_ids=SC-05 | | SC-06 健康养生 | 0.5 | 0.5 | scene_ids=SC-06 | | SC-07 日常生活 | 0.6 | 0.4 | scene_ids=SC-07 | | SC-08 人格测评 | 0.4 | 0.6 | scene_ids=SC-08 |
3.6 五行分智能体个性化权重
分智能体检索时,按相生相克关系调整结果权重:
---
四、与 AI OS 的集成
| 六层 | RAG 角色 | |------|---------| | 灵魂层(x) | 决定检索的"价值观"——找到"对的事"而非随便的信息 | | 上下文工程层(L1) | 提供长期记忆的向量检索能力 | | 决策层(L2) | 根据场景/意图选择检索策略 | | Skills层(L3) | RAG检索作为一个原子化技能 | | MCP层(L4) | 通过MCP接口通信 | | 工作流层(L5) | 标准化流程:意图->检索->精排->注入->回答 | | 知识层(L6) | 核心作用域——让知识可检索 |
---
五、实施路线图
P0 - 基础设施(2-3天)
P1 - 全量索引(2-3天)
P2 - AI OS 集成(2-3天)
共 7-9 天
---
六、预期效果
| 场景 | 关键词搜索 | RAG 后 | |------|-----------|--------| | 搜"什么叫拔阴取阳" | 只找到含四字的文件 | 找到文档 + 相关转化案例 | | "我和伴侣总是冷战" | 无结果 | 沟通策略 + SC-01场景内容 | | "如何培养团队" | 含"培养""团队"的文件 | 土行人领导力 + 梯队建设 | | "早上起不来怎么办" | 无结果 | 识别为阴土惰性 -> 方法 | | 中英文混合 | 只搜到一种语言 | 中英文都搜到 |
性能目标:单次检索 < 1秒,全量索引 < 30分钟,磁盘 < 200MB
---
版本: v1.0 | 创建: 2026-05-26 | 位置: 龙脑OS·知识地基层